草庐IT

捕捉 WM_DEVICECHANGE

全部标签

c++ - 在 Windows X 按钮上单击并按住鼠标时 WM_TIMER 消息被抑制

我正在开发一款客户端需要继续处理Windows消息的游戏,否则游戏可能会被利用。为了解决窗口调整大小和拖动事件期间的这个问题,我们有一个每50毫秒触发一次的WM_TIMER消息,这将重新启动主事件循环。问题是,当用户单击并按住X或窗口客户端的最小化按钮时,此技术不起作用。(所以他们没有完成点击,他们只是停止了客户端。)使用Spy++,我看到的最后消息是:00160D3CPWM_NCLBUTTONDOWNnHittest:HTCLOSExPos:1150yPos:17800160D3CPWM_MOUSEMOVEfwKeys:MK_LBUTTONxPos:1014yPos:-23在我移动鼠

windows - 仅消息窗口可以接收 WM_QUERYENDSESSION 吗?

在程序的调试版本中,我创建了一个可见窗口,WM_QUERYENDSESSION消息由其WNDPROC接收。在发布版本中,窗口应该是纯消息的,所以我在调用CreateWindowEx()时将HWND_MESSAGE指定为hWndParent。不幸的是,我再也没有收到WM_QUERYENDSESSION消息。WM_QUERYENDSESSION是那些广播消息之一吗mentionedhere?Amessage-onlywindow[...]doesnotreceivebroadcastmessages. 最佳答案 MSDN给出了“仅消息窗

c++ - 如何捕捉键盘和鼠标事件?

我想创建一个应用程序。当用户按下键盘上的特殊键或/和使用滚轮时,此应用程序必须执行某些操作。此应用程序是一项服务。它没有window。我想捕获与其他应用程序一起设计的任何键盘或鼠标事件。例如,您正在通过第3方应用程序看电视。如果您按下Ctrl+Shift并使用滚轮,我的应用程序会更改音量。我使用Windows7x64和VisualStudio2008。 最佳答案 您可以调用SetWindowsHookEx()在各种事件发生时得到通知。您可能希望使用键盘钩子(Hook)和鼠标钩子(Hook)来监视鼠标事件。

windows - PeekMessage() 需要 1-2 毫秒来检索 WM_MOUSEMOVE 消息?

我在这里看了很多关于PeekMessage和WM_MOUSEMOVE的帖子,但到目前为止我还没有发现任何与性能相关的内容。长话短说;我正在做PC游戏开发,昨天我注意到我可以将我们的应用程序从稳定的500+FPS(在菜单中)提升到个位数FPS(低至6),只需快速移动鼠标即可。经过几个小时的挖掘和分析,我发现来源是PeekMessage()。不是该消息的DispatchMessage(),只是偷看。我测量了单独调用该函数的频率非常频繁(每帧多次),时钟频率为1-2毫秒。如果将其与快速鼠标移动相结合,则每渲染一帧,消息队列的传输可能会花费我1000-2000毫秒以上的时间。听起来很荒谬,但实

c++ - WM_POINTER 和高 DPI 设置

我已经在桌面触摸屏上使用Windows8TouchAPI(WM_POINTERDOWN/WM_POINTERUPDATE/WM_POINTERUP)工作了一段时间.然后我在Windows8平板电脑上尝试了我的测试程序,发现我的应用程序无法准确检测到用户触摸屏幕的位置。另一方面,使用鼠标效果很好:我得到了正确的坐标。由于我启用了EnableMouseInPointer(TRUE)模式,这意味着正在使用相同的代码来处理鼠标事件和触摸事件,这至少意味着我的代码在某种程度上可以正常工作。我发现,平板电脑启用了高DPI模式,使用户可以触摸屏幕上本来很小的东西。当我更改平板电脑上的DPI以消除缩放

c++ - 从任务栏缩略图关闭按钮打开处理 WM_CLOSE 时不显示 MessageBox

尝试在Windows7的任务栏缩略图中使用关闭按钮关闭窗口时尝试设置“你想保存吗”对话框(启用aeropeek)。在处理WM_CLOSE时使用MessageBox()不起作用。MessageBox不会显示,直到您将鼠标光标移到缩略图之外,从而禁用aeropeek。许多应用程序都有这种错误行为,所以这可能是Windows7中的设计缺陷,但对于某些程序(Word、记事本、VisualStudio等)它可以正常工作,所以我想知道他们使用了什么技巧(或者以编程方式“退出”aeropeek-mode需要什么)。Windows7附带的小型“录音机”应用程序也有同样的问题(如果您在没有保存的情况下录

windows - 在宽屏幕的 Windows 8 Metro 中捕捉 ScrollViewer 不会捕捉到最后一项

我已在ScrollViewer内的应用程序中启用捕捉点,如以下问题所述:EnablingScrollViewerHorizontalSnapPointswithbindablecollection我遇到的问题是,当我在全高清显示器(1920x1080)中试用我的应用程序时,每个项目的宽度为1400像素。当我在项目#n-1中捕捉到滚动时,我无法滚动到最后一个,因为它没有捕捉...我必须做的hack是添加一个“假”项目,最后是透明的,这样我就可以滚动到我收藏的最后一个项目:我什至使用这个hack的第二个问题是,从Metro应用程序我无法访问屏幕尺寸,所以我什至无法添加最后一个宽度取决于屏幕

c++ - 确定窗口捕捉距离

我正在开发一个为其窗口提供捕捉功能的应用程序;将一个窗口或另一个窗口拖动到足够靠近屏幕边缘的位置,它就会卡入到位。Windows7offersabuilt-insnapfeature,为了保持一致性,我希望尽可能从操作系统获取“这个窗口需要关闭多长时间”的指标。GetSystemMetrics然而,似乎没有任何特别有用的东西,DWMdocs同样没有帮助。有什么方法可以通过编程方式获取此指标吗? 最佳答案 实际上并没有这样的指标,因为您要查找的“捕捉距离”实际上始终为0。当您在Windows7(可能还有Windows8,对此不确定)上

linux - 如何获得捕捉 SIGABRT 的信号

我正在trycatch一个信号,以便让我们的程序正常退出。当我们读取一个我们无法控制的坏文件时,就会发生SIGABRT。这是一个多平台程序,因此我们需要可以在Windows、Linux和Mac上运行的程序。出于某种原因,当我在signalhandlingexample添加一个signal_callback_handler时,并在Windows中运行问题测试,它仍然像我们之前那样出现中止弹出框。如何在中止弹出窗口发生之前重定向?我希望我们的程序正常退出。//constructorexample::example(conststringtheString){signal(SIGABRT,s

c# - 无法将 WM_INPUTLANGCHANGEREQUEST 发送到某些控件

我正在研究(又一个)keyboardlayoutswitcher并在Skype窗口(win7x64上的6.22版)中遇到了奇怪的麻烦。AnycombinationsGetForegroundWindow()/GetFocus()/GetParentWindow()不会成功更改布局仅在消息输入内,更奇怪的是,仅当输入多个字符时。其他情况下工作得非常好,除了wpf应用程序拒绝服从没有focusedHandle的东西。publicstaticvoidSetNextKeyboardLayout(){IntPtrhWnd=GetForegroundWindow();uintprocessId;u